/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package traspasos.beans;

import abstractClasses.AbstractListadoEntidades;
import entities.Almacen;
import entities.AlmacenTienda;
import entities.EnvioTraspasoMercancia;
import entities.LineaPeticionTraspasoMercancia;
import entities.Tienda;
import entities.Usuario;
import entities.UsuarioTienda;
import facades.LineaPeticionTraspasoMercanciaFacade;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.event.Observes;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import qualifiers.EventoEntidadCreada;
import qualifiers.UsuarioLogeado;

/**
 *
 * @author damfercer
 */
@Named(value = "enviosPendientesBean")
@ViewScoped
public class EnviosPendientesBean extends AbstractListadoEntidades<LineaPeticionTraspasoMercancia, LineaPeticionTraspasoMercanciaFacade> implements Serializable {
    @Inject
    @UsuarioLogeado
    Usuario usuario;
    
    public EnviosPendientesBean() {
    }
    
    @PostConstruct
    @Override
    public void init(){
        setFacade(getEntityFacadeInstance().get());
        inicializarPeticiones();
    }
    
    private void inicializarPeticiones(){
        setListadoEntidades(getPeticionesPendientesDeEnviarUsuario());
    }
    
    
    private List<LineaPeticionTraspasoMercancia> getPeticionesPendientesDeEnviarUsuario(){
        List<LineaPeticionTraspasoMercancia> lineas=new ArrayList<LineaPeticionTraspasoMercancia>();
        List<UsuarioTienda> usuarioTiendas=usuario.getUsuarioTiendaList();
        for (UsuarioTienda usuarioTienda : usuarioTiendas) {
            Tienda t=usuarioTienda.getTienda();
            for (AlmacenTienda almacenTienda : t.getAlmacenTiendaList()) {
                Almacen almacenVentas=almacenTienda.getAlmacen();
                lineas.addAll(getFacade().getLineasPeticionesPendientesDeAlmacen(almacenVentas));
                if(almacenVentas.getAlmacenList()!=null && !almacenVentas.getAlmacenList().isEmpty()){
                    Almacen almacenReserva=almacenVentas.getAlmacenList().iterator().next();
                    lineas.addAll(getFacade().getLineasPeticionesPendientesDeAlmacen(almacenReserva));
                }
            }
        }
        return lineas;
    }
    

    public Boolean getPuedeCrearNuevoEnvio(){
        Boolean puedeCrearNuevoEnvio=false;
        if(this.getEntidadesElegidasList()!=null && !this.getEntidadesElegidasList().isEmpty()){
            puedeCrearNuevoEnvio=true;
            LineaPeticionTraspasoMercancia lp=getEntidadesElegidasList().get(0);
            Almacen almacenEnvio=lp.getAlmacenEnvio();
            Almacen almacenDestino=lp.getPeticionTraspasoMercancia().getAlmacen();
            for (LineaPeticionTraspasoMercancia lineaPeticionTraspasoMercancia : this.getEntidadesElegidasList()) {
                puedeCrearNuevoEnvio=puedeCrearNuevoEnvio && lineaPeticionTraspasoMercancia.getAlmacenEnvio().equals(almacenEnvio) && lineaPeticionTraspasoMercancia.getPeticionTraspasoMercancia().getAlmacen().equals(almacenDestino);
                if(!puedeCrearNuevoEnvio){
                    break;
                }
            }
        }
        return puedeCrearNuevoEnvio;
    }
    
    /*//TODO: VER
    @Override
    public void onEntidadCreada(@Observes @EventoEntidadCreada LineaPeticionTraspasoMercancia entidad){
        getPeticionesPendientesDeEnviarUsuario();
    }
    
    //TODO: VER
    public void onNuevoEnvio(@Observes @EventoEntidadCreada EnvioTraspasoMercancia envio){
        getPeticionesPendientesDeEnviarUsuario();
    }*/
    
    public String irANuevoEnvio(){
        return "/views/tienda/NuevoEnvioTraspasoMercancia?faces-redirect=true";
    }
    
}
